/* Die Klasse Hoerbuchsuchen implementiert alle suchemoeglichkeit , 
 * die man fuer die einer Hoerbuch braucht
 * 
 * 
 * Datei: Hoerbuchsuchen.java       
 * Autor: Gregory Keussi
 * 
 * Datum: 16.11.11                 Version: 0.1 
 * 
 * Historie: 20.11.11 v0.1  
 *                    implementiert  
 * 
 */

package suche;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import medienverwaltung.Hoerbuch;
import medienverwaltung.Medium;

public class Hoerbuchsuchen implements SuperString<Medium>
{
  private List<Hoerbuch> myHoerbuchList;
  private List<Hoerbuch> Ergebnis = new ArrayList<Hoerbuch> ();


  /*
   * Die Methode ermoeglich die suche eines Hoerbuch nach dem Titel
   */

  public List<Hoerbuch> suchHoerbuchNachTitel (String titel)
  {
    for (Hoerbuch Hoerbuch : myHoerbuchList)
    {
      if ( (Hoerbuch.gibTitel ().contains (titel)))
      {
        Ergebnis.add (Hoerbuch);
      }
    }

    Collections.sort (Ergebnis, new CompareMedium ());
    return Ergebnis;
  }


  /*
   * Die Methode ermoeglich die suche eines Hoerbuch nach dem Thema
   */
  public List<Hoerbuch> suchHoerbuchNachThema (String thema)
  {
    for (Hoerbuch Hoerbuch : myHoerbuchList)
    {
      if ( (Hoerbuch.gibTitel ().contains (thema)))
      {
        Ergebnis.add (Hoerbuch);
      }
    }

    Collections.sort (Ergebnis, new CompareMedium ());
    return Ergebnis;
  }


  /*
   * Die Methode ermoeglich die suche eines Hoerbuch nach der
   * Stichwoerte und liefert eine Liste von entsprechende Hoerbuchen
   * zurueck,die Suche Krietere entsprechen
   */

  public List<Hoerbuch> suchHoerbuchNachStichworte (String stich)
  {
    for (Hoerbuch Hoerbuch : myHoerbuchList)
    {
      if ( (Hoerbuch.gibTitel ().contains (stich)))
      {
        Ergebnis.add (Hoerbuch);
      }
    }

    Collections.sort (Ergebnis, new CompareMedium ());
    return Ergebnis;
  }


  /*
   * Die Methode ermoeglich die suche eines Hoerbuch nach der Fachgebiet
   * und liefert eine Liste von entsprechende Hoerbuchen zurueck,die
   * Suche Krietere entsprechen
   */

  public List<Hoerbuch> suchHoerbuchNachFachgebiet (String fach)
  {
    for (Hoerbuch Hoerbuch : myHoerbuchList)
    {
      if ( (Hoerbuch.gibTitel ().contains (fach)))
      {
        Ergebnis.add (Hoerbuch);
      }
    }

    Collections.sort (Ergebnis, new CompareMedium ());
    return Ergebnis;
  }


  /*
   * Die Methode ermoeglich die suche eines Hoerbuch nach der Initial
   * und liefert eine Liste von entsprechende Hoerbuchen zurueck,die
   * Suche Krietere entsprechen
   */

  public List<Hoerbuch> suchHoerbuchNachInitial (String initial)
  {
    for (Hoerbuch Hoerbuch : myHoerbuchList)
    {
      if ( (Hoerbuch.gibTitel ().contains (initial)))
      {
        Ergebnis.add (Hoerbuch);
      }
    }

    Collections.sort (Ergebnis, new CompareMedium ());
    return Ergebnis;
  }


  /*
   * Die Methode ermoeglich die suche eines Hoerbuch nach der Sachgebiet
   * und liefert eine Liste von entsprechende Hoerbuchen zurueck,die
   * Suche Krietere entsprechen
   */

  public List<Hoerbuch> suchHoerbuchNachSachgebiet (String sach)
  {
    for (Hoerbuch Hoerbuch : myHoerbuchList)
    {
      if ( (Hoerbuch.gibTitel ().contains (sach)))
      {
        Ergebnis.add (Hoerbuch);
      }
    }

    Collections.sort (Ergebnis, new CompareMedium ());
    return Ergebnis;
  }


  /*
   * Die Methode ermoeglich die suche eines Hoerbuch nach dem Datum und
   * liefert eine Liste von entsprechende Hoerbuchen zurueck,die Suche
   * Krietere entsprechen Die Methode soll auch pruefen, ob das
   * eingegebenen Datum groesser als die Erscheinungsjahr den Hoerbuchen
   * ist
   */

  public List<Hoerbuch> suchHoerbuchNachErschjahrKlein (String date)
  {
    int iDate = Integer.parseInt (date);
    for (Hoerbuch Hoerbuch : myHoerbuchList)
    {
      if ( (Hoerbuch.gibErscheinungsdatum ().gibJahr () < iDate))
      {
        Ergebnis.add (Hoerbuch);
      }
    }

    Collections.sort (Ergebnis, new CompareMedium ());
    return Ergebnis;
  }


  public List<Hoerbuch> suchHoerbuchNachSchlagworte (String schlag)
  {
    for (Hoerbuch Hoerbuch : myHoerbuchList)
    {
      if ( (Hoerbuch.gibStichworte ().contains (schlag)))
      {
        Ergebnis.add (Hoerbuch);
      }
    }

    Collections.sort (Ergebnis, new CompareMedium ());
    return Ergebnis;
  }


  /*
   * Die Methode ermoeglich die suche eines Hoerbuch nach dem Datum und
   * liefert eine Liste von entsprechende Hoerbuchen zurueck,die Suche
   * Krietere entsprechen Die Methode soll auch pruefen, ob das
   * eingegebenen Datum kleiner als die Erscheinungsjahr den Hoerbuchen
   * ist
   */

  public List<Hoerbuch> suchHoerbuchNachErschjahrGross (String date)
  {

    int iDate = Integer.parseInt (date);
    for (Hoerbuch Hoerbuch : myHoerbuchList)
    {
      if ( (Hoerbuch.gibErscheinungsdatum ().gibJahr () > iDate))
      {
        Ergebnis.add (Hoerbuch);
      }
    }

    Collections.sort (Ergebnis, new CompareMedium ());
    return Ergebnis;
  }


  /*
   * Die Methode ermoeglich die suche eines Hoerbuch nach dem Datum und
   * liefert eine Liste von entsprechende Hoerbuchen zurueck,die Suche
   * Krietere entsprechen Die Methode soll auch pruefen, ob das
   * eingegebenen Datum gleich als die Erscheinungsjahr den Hoerbuchen
   * ist
   */

  public List<Hoerbuch> suchHoerbuchNachErschjahrGleich (String date)
  {

    int iDate = Integer.parseInt (date);
    for (Hoerbuch Hoerbuch : myHoerbuchList)
    {
      if ( (Hoerbuch.gibErscheinungsdatum ().gibJahr () == iDate))
      {
        Ergebnis.add (Hoerbuch);
      }
    }

    Collections.sort (Ergebnis, new CompareMedium ());
    return Ergebnis;
  }


  /*
   * Die Methoe ermoeglicht die Recherche von einer Hoerbuch nach seinem
   * Autor. Und liefert eine Liste von Hoerbuchen,die den Autor
   * geschrieben hat.
   */

  public List<Hoerbuch> suchHoerbuchNachAutor (String autor)
  {
    for (Hoerbuch p : myHoerbuchList)
    {

      if ( (p.gibAutorenListeString ().contains (autor)))
      {
        Ergebnis.add (p);
      }

    }
    Collections.sort (Ergebnis, new CompareMedium ());
    return Ergebnis;
  }


  /*
   * Die Methode liefert eine Liste von allen Hoerbuch, die in der
   * Medienliste sind
   */
  public List<Hoerbuch> gibMyHoerbuchList ()
  {
    return myHoerbuchList;
  }


  /*
   * Die Methode ermoeglicht,dass man eine neue Liste von von Hoerbuch
   * gibt
   */

  public void setzeMyHoerbuchList (List<Hoerbuch> myHoerbuchList)
  {
    this.myHoerbuchList = myHoerbuchList;
  }


  /*
   * Die methode liefert eine Liste zurueck. Durch diese Methode kann
   * man eine Liste von seiner gesuchten krietere bekommen
   */

  public List<Hoerbuch> gibErgebnis ()
  {
    return Ergebnis;
  }


  /*
   * Die Methode implementiert die Verwaltung von der Suche einer
   * Hoerbuch. und sie liefert nichts zurueck
   */

  public void HoerbuchSuchVerwalter (int i, String s)
  {
    switch (i)
    {
    /*
     * Die case 0 ist die zuweisung der werte null an die Liste Ergebnis
     * ,
     */

    case 0:
      Ergebnis = null;
      break;

    /*
     * Die case 1 Die die zuweisung von der Werte null an die Liste
     * Ergebnis..
     */

    case 1:
      Ergebnis = null;
      ;
      break;

    /*
     * Die case 2 ist hoerruf der Methode ,die nach Erscheinungsdatum
     * gleich als das eingegeben Datum sucht
     */

    case 2:
      suchHoerbuchNachErschjahrGleich (s);
      break;

    /*
     * Die case 3 ist hoerruf der Methode , die nach Erscheinungsdatum
     * Grosser als das eingegeben Datum sucht
     */

    case 3:
      suchHoerbuchNachErschjahrGross (s);
      break;

    /*
     * Die case 4 ist hoerruf der Methode , die nach Erscheinungsdatum
     * kleiner als das eingegeben Datum sucht
     */

    case 4:
      suchHoerbuchNachErschjahrKlein (s);
      break;

    /*
     * Die case 5 ist hoerruf der Methode , die nach Fachgebiet sucht
     */

    case 5:
      suchHoerbuchNachFachgebiet (s);
      break;

    /*
     * Die case 6 ist hoerruf der Methode , die nach Initial sucht
     */

    case 6:
      suchHoerbuchNachInitial (s);
      break;

    /*
     * Die case 7 ist hoerruf der Methode , die nach Sachgebiet sucht
     */

    case 7:
      suchHoerbuchNachSachgebiet (s);
      break;

    /*
     * Die case 8 ist hoerruf der Methode , die nach Schlagworte sucht
     */

    case 8:
      suchHoerbuchNachSchlagworte (s);
      break;

    /*
     * Die case 9 die zuweisung von der Werte null an die Liste
     * Ergebnis.
     */
    case 9:
      Ergebnis = null;
      break;

    /*
     * Die case 10 ist hoerruf der Methode , die nach Stichworte sucht
     */

    case 10:
      suchHoerbuchNachStichworte (s);
      break;

    /*
     * Die case 11 ist hoerruf der Methode ,die nach Thema sucht
     */

    case 11:
      suchHoerbuchNachThema (s);
      break;

    /*
     * Die case 12 ist hoerruf der Methode ,die nach Titel sucht
     */

    case 12:
      suchHoerbuchNachTitel (s);
      break;

    default:
      break;

    }

  }


  @Override
  /*
   * Die Methode liert ale basis informationen ueber ein Medium in einem
   * String .Die Methode nimmt ein Objekt Medium als parameter und gibt
   * ein String zurueck.
   */
  public String superString (Medium t)
  {
    String s = "\n ";
    s += "\nFach: ";
    s += t.gibFachgebiet ();
    s += " Sach: ";
    s += t.gibSachgebiet ();
    s += " \nThema: ";
    s += t.gibThema ();
    s += " Titel ";
    s += t.gibTitel ();
    s += " \nStichW: ";
    s += t.gibStichworteString ();
    s += " Erschnungsjahr: ";
    s += t.gibErscheinungsdatumString ();
    s += "\n Verlag: ";
    s += t.gibVerlag ().gibName ();

    return s;
  }


  /*
   * Die Methode ErgebnisToString wandelt eine Liste von gefundenen
   * Hoerbuch in String um. und die Methode wird spaeter fuer die Gui
   * verwendet. Die Methode nimmt eine Liste von Objekten Hoerbuch .Und
   * sie gibt ein String zurueck.
   */
  public String ErgebnisToString (List<Hoerbuch> HoerbuchL)
  {
    String a = " ";

    for (Hoerbuch Hoerbuch : HoerbuchL)
    {
      a = "Hoerbuch:\n ";
      a += Hoerbuch.gibAutorenListeString ();
      a += superString (Hoerbuch);
    }
    return a;
  }

}
